// node 23_定制化输出数组.js

// Math.ceil()          上取整
// Math.random()        获取一个随机数
// Array.from()         把类数组结构转换为数组
// Array.of()           将一组参数转换为数组
// Set                  集合数据结构
// Map                  键/值存储机制
//          get(),has() 查
//          set()       增，改
//          delete()    删
//          clear()     删除全部
// values()             返回数组元素的迭代器
// forEach()            迭代方法，对数组传入的每一项都运行函数，无返回值

// 输入：[12,54,6,3,37,26,7,9,10,15,17,71,46,34,26,12,7,9]
// 输出：[
//         [ 3, 6, 7, 9 ],
//         [ 10, 12, 15, 17 ],
//         [ 26 ],
//         [ 34, 37 ],
//         [ 46 ],
//         [ 54 ],
//         [ 71 ]
//     ]

//1，得到一组x到y之间数字组成的数组
function getRandomNumber(min,max) { //获取x到y之间的一个数
    min = Math.ceil(min)   //上取整
    max = Math.floor(max)  //下取整
    return Math.floor(Math.random()*(max-min)+min)
}
let arr = Array.from({length:20},()=>getRandomNumber(10,60))//生成数组

//2，去重
let arr2 = [...new Set(arr)]

//3，排序
arr2.sort((a,b) => a-b)

//4，(1)使用对象存储
let obj = {}
for(let item of arr2){
    let key = Math.floor(item / 10)
    if(!obj[key]) obj[key] = []
    obj[key].push(item)
}
let newArr = []
for(let key in obj){
    newArr.push(obj[key])
}

//4，(2)使用Map存储
let map = new Map()
arr2.forEach(item =>{
    let key = Math.floor(item / 10)
    if(!map.get(key)) map.set(key,[])
    map.get(key).push(item)
})
let newArr2 = []
for(let value of map.values()){
    newArr2.push(value)
}

console.log('使用对象存储:')
console.log(newArr)
console.log('使用Map存储:')
console.log(newArr2)